package com.example.home_app.util

import android.annotation.SuppressLint
import android.content.Context
import android.util.Log
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.amap.api.location.AMapLocationListener
import com.example.home_app.BaseApplication
import com.example.home_app.util.State.City
import com.example.home_app.util.State.CityStart
import java.text.SimpleDateFormat

/**
 * Created by dell on 2021/8/10.
 */
object Location {
    /**
     * 定位
     */

    @SuppressLint("StaticFieldLeak")
    private var mLocationClient: AMapLocationClient? = null
    //声明定位回调监听器
    private var mLocationOption: AMapLocationClientOption? = null
    fun initMap(context: Context = BaseApplication.instance) {
        //初始化定位
        mLocationClient = AMapLocationClient(context)
        //设置定位回调监听
        mLocationClient !!.setLocationListener(mLocationListener)
        mLocationOption = AMapLocationClientOption()
        //设置定位模式为高精度模式，AMapLocationMode.Battery_Saving为低功耗模式，AMapLocationMode.Device_Sensors是仅设备模式
        mLocationOption!!.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
        mLocationOption!!.isNeedAddress = true //设置是否返回地址信息（默认返回地址信息）
        mLocationOption!!.isOnceLocation = false //设置是否只定位一次,默认为false
        //mLocationOption!!.isWifiActiveScan = true //设置是否强制刷新WIFI，默认为强制刷新
        mLocationOption!!.isMockEnable = false //设置是否允许模拟位置,默认为false，不允许模拟位置
        mLocationOption!!.interval = 15000 //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption!!.isOnceLocation = false //可选，是否设置单次定位默认为false即持续定位
        mLocationOption!!.isOnceLocationLatest = false //可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
        mLocationOption!!.isWifiScan = true //可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        mLocationOption!!.isLocationCacheEnable = true //可选，设置是否使用缓存定位，默认为true
        //给定位客户端对象设置定位参数
        mLocationClient!!.setLocationOption(mLocationOption)
        //启动定位
        mLocationClient!!.startLocation()
    }

    private var mLocationListener =
        AMapLocationListener { aMapLocation ->
            if (aMapLocation != null) {
                if (aMapLocation.errorCode == 0) {
                    //定位成功回调信息，设置相关消息
                    aMapLocation.locationType //获取当前定位结果来源，如网络定位结果，详见定位类型表
                    // aMapLocation.getLatitude();//获取纬度
                    // aMapLocation.getLongitude();//获取经度
                    aMapLocation.accuracy //获取精度信息
                    SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                    //  aMapLocation.getAddress();//地址，如果option中设置isNeedAddress为false，则没有此结果，网络定位结果中会有地址信息，GPS定位不返回地址信息。
                    //  aMapLocation.getCountry();//国家信息
                    //  aMapLocation.getProvince();//省信息
                    //  aMapLocation.getCity();//城市信息
                    //   aMapLocation.getDistrict();//城区信息
                    //    aMapLocation.getStreet();//街道信息
                    //     aMapLocation.getStreetNum();//街道门牌号信息
                    //    aMapLocation.getCityCode();//城市编码
                    //     aMapLocation.getAdCode();//地区编码
                    println("所在城市：" + aMapLocation.country + aMapLocation.province + aMapLocation.city)
                    mLocationClient!!.stopLocation() //停止定位
                    City = aMapLocation.city
                    CityStart =false
                    //销毁
                    if (mLocationClient != null) {
                        mLocationClient !!.onDestroy()
                    }
                   // binding.dingwei.setText(aMapLocation.city)

                } else {
                    //显示错误信息ErrCode是错误码，errInfo是错误信息，详见错误码表。
                    Log.e(
                        "info", "location Error, ErrCode:"
                                + aMapLocation.errorCode + ", errInfo:"
                                + aMapLocation.errorInfo
                    )
                }
            }
        }

}